﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace DAL
{
    public class Contas
    {
        public DataTable ListarContas(int? id=null)
        {
            //cria o objeto de conexão com os dados do banco de dados, usuário e senha de conexão
            SqlConnection conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());
       
            //cria o objeto do comando a ser executado no banco, informando o nome da procedure e o objeto de conexão do banco
            SqlCommand cmd = new SqlCommand("SP_S_CATEGORIA_CONTA", conexao);
            cmd.CommandType = CommandType.StoredProcedure;

            if (id != null)
                cmd.Parameters.AddWithValue("@ID",id);

            //Intancia um DataTable
            DataTable dt = new DataTable();

            // Abre a Conexão
            conexao.Open();

            //Objeto comando passado ao construtor do DataAdapter
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            //Preenche o DataTable com o resultado da consulta
            da.Fill(dt);

            // Libera o command
            cmd.Dispose();

            // Verifica se a conexão esta aberta e fecha se nescessário
            if (conexao.State == ConnectionState.Open)
            {
                conexao.Close();
            }

            //Retorno um DataTable com o resultado do select
            return dt;

        }

        public DataTable ListaContas(int CodigoConta)
        {
            DataTable dttNoticia = new DataTable();

            SqlConnection conexao = new SqlConnection(
                ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());

            conexao.Open();

            SqlCommand cmd = new SqlCommand("SP_S_Unica_CONTA", conexao);
            cmd.CommandType = CommandType.StoredProcedure;

            if (CodigoConta > 0)
            {
                cmd.Parameters.AddWithValue("@ID", CodigoConta);
            }

            //Criando o objeto DataAdapter
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dttNoticia);

            conexao.Close();


            return dttNoticia;
        }

        public DataTable ListarContas(int CodigoCategoria)
        {
            DataTable dttContas = new DataTable();

            SqlConnection conexao = new SqlConnection(
                ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());

            conexao.Open();

            SqlCommand cmd = new SqlCommand("SP_S_CONTA", conexao);
            cmd.CommandType = CommandType.StoredProcedure;

            if (CodigoCategoria > 0)
            {
                cmd.Parameters.AddWithValue("@ID_CATEGORIA_CONTA", CodigoCategoria);
            }

            //Criando o objeto DataAdapter
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(dttContas);

            conexao.Close();


            return dttContas;
        }

        public DataTable Conta()
        {
            //cria o objeto de conexão com os dados do banco de dados, usuário e senha de conexão
            SqlConnection conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());

            //cria o objeto do comando a ser executado no banco, informando o nome da procedure e o objeto de conexão do banco
            SqlCommand cmd = new SqlCommand("SP_S_CONTA", conexao);
            cmd.CommandType = CommandType.StoredProcedure;

            //Intancia um DataTable
            DataTable dt = new DataTable();

            // Abre a Conexão
            conexao.Open();

            //Objeto comando passado ao construtor do DataAdapter
            SqlDataAdapter da = new SqlDataAdapter(cmd);

            //Preenche o DataTable com o resultado da consulta
            da.Fill(dt);

            // Libera o command
            cmd.Dispose();

            // Verifica se a conexão esta aberta e fecha se nescessário
            if (conexao.State == ConnectionState.Open)
            {
                conexao.Close();
            }

            //Retorno um DataTable com o resultado do select
            return dt;

        }

        public void InsereAlteraContas(int? id, string nome, string desc,int idCategoria,DateTime data_venc,double valor,string foto, bool pago)
        {
            //cria o objeto de conexão com os dados do banco de dados, usuário e senha de conexão
            SqlConnection conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());

            //cria o objeto do comando a ser executado no banco, informando o nome da procedure e o objeto de conexão do banco
            string comando;
            if (id == null)
                comando = "SP_I_CONTA";
            else
                comando = "SP_U_CONTA";

            SqlCommand cmd = new SqlCommand(comando, conexao);
            cmd.CommandType = CommandType.StoredProcedure;
            if(id!=null)
                cmd.Parameters.AddWithValue("@ID",id);
            cmd.Parameters.AddWithValue("@NOME",nome);
            cmd.Parameters.AddWithValue("@DESCRICAO", desc);
            cmd.Parameters.AddWithValue("@ID_CATEGORIA_CONTA", idCategoria);
            cmd.Parameters.AddWithValue("@DATA_VENCIMENTO",data_venc);
            cmd.Parameters.AddWithValue("@VALOR", valor);
            cmd.Parameters.AddWithValue("@FOTO", foto);
            cmd.Parameters.AddWithValue("@STATUS",pago);
            // Abre a Conexão
            conexao.Open();

            cmd.ExecuteNonQuery();

            // Libera o command
            cmd.Dispose();

            // Verifica se a conexão esta aberta e fecha se nescessário
            if (conexao.State == ConnectionState.Open)
            {
                conexao.Close();
            }
        }

        public void DeletaConta(int id)
        {
            //cria o objeto de conexão com os dados do banco de dados, usuário e senha de conexão
            SqlConnection conexao = new SqlConnection(ConfigurationManager.ConnectionStrings["ConexaoBD"].ToString());

            //cria o objeto do comando a ser executado no banco, informando o nome da procedure e o objeto de conexão do banco
            string comando;
            
            comando = "SP_D_CONTA";

            SqlCommand cmd = new SqlCommand(comando, conexao);
            cmd.CommandType = CommandType.StoredProcedure;
            
            cmd.Parameters.AddWithValue("@ID", id);

            // Abre a Conexão
            conexao.Open();

            cmd.ExecuteNonQuery();

            // Libera o command
            cmd.Dispose();

            // Verifica se a conexão esta aberta e fecha se nescessário
            if (conexao.State == ConnectionState.Open)
            {
                conexao.Close();
            }
        }

    }
}
